home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc™ Source Code / Core / ObjctItr.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-28  |  5.4 KB  |  205 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        ObjctItr.cp
  3.  
  4.     Contains:    Implementation of ODValueIterator class
  5.  
  6.     Owned by:    Caia Grisar
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <8>      8/3/95    RR        #1257260: Collapse B classes. Remove
  13.                                     somInit methods. Don't call IsInitialized
  14.                                     or SubclassResponsibility
  15.          <7>      5/3/95    DM        IsNotComplete return after try blocks
  16.          <6>      5/2/95    DM        1244864: SOM_TRY blocks needed
  17.          <5>     8/31/94    TÇ        #1183129, #1183116, #1183119, #1183111:
  18.                                     Lots of ErrorCode cleanup.
  19.          <4>     8/24/94    CG        #1181622: Updated file ownership.
  20.          <3>     8/17/94    CG        #1181440: delete -> ODDeleteObject, no more
  21.                                     throwing, no more magic no.s.
  22.          <2>      8/8/94    jpa        Fixed mistaken "1" value for heap to
  23.                                     ODNewPtr
  24.          <1>     7/29/94    CG        first checked in
  25.          <1>     6/24/94    CG        first checked in
  26.          <0>     6/24/94    SV        SOMverted
  27.          <3>      5/9/94    MB        #1162181: Changes necessary to install MMM.
  28.          <2>     3/15/94    MB        Changes to support SCpp/ASLM builds,
  29.                                     #1150864.
  30.          <2>      2/8/94    TÇ        Throw -> THROW & some code clean up
  31.          <1>     1/14/94    CG        first checked in
  32.     To Do:
  33.     In Progress:
  34. */
  35.  
  36.  
  37. #ifndef _PLFMDEF_
  38. #include "PlfmDef.h"
  39. #endif
  40.  
  41. #ifndef _EXCEPT_
  42. #include "Except.h"
  43. #endif
  44.  
  45.  
  46. #define ODObjectIterator_Class_Source
  47. #define VARIABLE_MACROS
  48. #include <ObjctItr.xih>
  49.  
  50. #ifndef SOM_ODObjectNameSpace_xh
  51. #include <ObjectNS.xh>
  52. #endif
  53.  
  54. #ifndef _STRHSHTB_
  55. #include "StrHshTb.h"
  56. #endif
  57.  
  58. #ifndef _ODMEMORY_
  59. #include "ODMemory.h"
  60. #endif
  61.  
  62. #ifndef _ISOSTR_
  63. #include "ISOStr.h"
  64. #endif
  65.  
  66. #ifndef _ODUTILS_
  67. #include <ODUtils.h>
  68. #endif
  69.  
  70. #pragma segment ODObjectIterator
  71.  
  72. //==============================================================================
  73. // ODObjectIterator
  74. //
  75. //    For all GetNext...
  76. //    kODTrue is returned if an entry was found, kODFalse otherwise.
  77. //    kODErrWrongNameSpaceType is thrown if the user attempts to use a function
  78. //    that does not match the type that the ODNameSpace was initialized
  79. //    with.
  80. //==============================================================================
  81.  
  82. //------------------------------------------------------------------------------
  83. // ODObjectIterator: ~ODObjectIterator
  84. //------------------------------------------------------------------------------
  85.  
  86. SOM_Scope void  SOMLINK ODObjectIteratorsomUninit(ODObjectIterator *somSelf)
  87. {
  88.     ODObjectIteratorData *somThis = ODObjectIteratorGetData(somSelf);
  89.     ODObjectIteratorMethodDebug("ODObjectIterator","somUninit");
  90.  
  91.     if (_fStrHashIterator)
  92.         ODDeleteObject( _fStrHashIterator );
  93.  
  94.     ODObjectIterator_parent_ODObject_somUninit(somSelf);
  95. }
  96.  
  97. //------------------------------------------------------------------------------
  98. // ODObjectIterator: InitObjectIterator
  99. //------------------------------------------------------------------------------
  100.  
  101. SOM_Scope void  SOMLINK ODObjectIteratorInitObjectIterator(ODObjectIterator *somSelf, Environment *ev,
  102.         ODObjectNameSpace* nameSpace)
  103. {
  104.     ODObjectIteratorData *somThis = ODObjectIteratorGetData(somSelf);
  105.     ODObjectIteratorMethodDebug("ODObjectIterator","InitObjectIterator");
  106.  
  107.     SOM_TRY
  108.  
  109.         somSelf->InitObject(ev);
  110.         _fNameSpace = nameSpace;
  111.         _fStrHashIterator = kODNULL;
  112.     
  113.     SOM_CATCH_ALL
  114.     SOM_ENDTRY
  115. }
  116.  
  117. //------------------------------------------------------------------------------
  118. // ODObjectIterator: First
  119. //------------------------------------------------------------------------------
  120.  
  121. SOM_Scope void  SOMLINK ODObjectIteratorFirst(ODObjectIterator *somSelf, Environment *ev,
  122.         ODISOStr* key, ODObject** object, ODULong* objectLength)
  123. {
  124.     ODObjectIteratorData *somThis = ODObjectIteratorGetData(somSelf);
  125.     ODObjectIteratorMethodDebug("ODObjectIterator","First");
  126.  
  127.     SOM_TRY
  128.  
  129.     if (!_fStrHashIterator)
  130.         _fStrHashIterator = new StringHashTableIterator
  131.                                 (_fNameSpace->GetHashTable(ev));
  132.     //THROW_IF_NULL(_fStrHashIterator);
  133.  
  134.     if (_fStrHashIterator)
  135.     {
  136.         ODULong    len;
  137.         ODUByte*    string;
  138.         _fStrHashIterator->First(&string, &len, (ODPtr*)object, objectLength);
  139.     
  140.         if (_fStrHashIterator->IsNotComplete())
  141.         {
  142.             *key = (ODISOStr)ODNewPtr(len + 1, kDefaultHeapID);
  143.             ODBlockMove((Ptr)string, *key, len);
  144.             (*key)[len] = 0;
  145.         }
  146.     }
  147.     
  148.     SOM_CATCH_ALL
  149.     SOM_ENDTRY
  150. }
  151.  
  152. //------------------------------------------------------------------------------
  153. // ODObjectIterator: Next
  154. //------------------------------------------------------------------------------
  155.  
  156. SOM_Scope void  SOMLINK ODObjectIteratorNext(ODObjectIterator *somSelf, Environment *ev,
  157.         ODISOStr* key, ODObject** object, ODULong* objectLength)
  158. {
  159.     ODObjectIteratorData *somThis = ODObjectIteratorGetData(somSelf);
  160.     ODObjectIteratorMethodDebug("ODObjectIterator","Next");
  161.  
  162.     SOM_TRY
  163.  
  164.     ODUByte* string;
  165.     ODULong    len;
  166.  
  167.     _fStrHashIterator->Next(&string, &len, (ODPtr*)object, objectLength);
  168.  
  169.     if (_fStrHashIterator->IsNotComplete())
  170.     {
  171.         *key = (ODISOStr)ODNewPtr(len + 1, kDefaultHeapID);
  172.         ODBlockMove((Ptr)string, *key, len);
  173.         (*key)[len] = 0;
  174.     }
  175.     
  176.     SOM_CATCH_ALL
  177.     SOM_ENDTRY
  178. }
  179.  
  180.  
  181. //------------------------------------------------------------------------------
  182. // ODObjectIterator: IsNotComplete
  183. //------------------------------------------------------------------------------
  184.  
  185. SOM_Scope ODBoolean  SOMLINK ODObjectIteratorIsNotComplete(ODObjectIterator *somSelf, Environment *ev)
  186. {
  187.     ODObjectIteratorData *somThis = ODObjectIteratorGetData(somSelf);
  188.     ODObjectIteratorMethodDebug("ODObjectIterator","IsNotComplete");
  189.  
  190.     ODBoolean notComplete = kODFalse;
  191.  
  192.     SOM_TRY
  193.  
  194.     if (_fStrHashIterator)
  195.         notComplete = _fStrHashIterator->IsNotComplete();
  196.     
  197.     SOM_CATCH_ALL
  198.     SOM_ENDTRY
  199.     
  200.     return notComplete;
  201. }
  202.  
  203.  
  204.  
  205.